package org.convallaria.system.biz.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.convallaria.infrastruct.db.entity.BaseEntity;

import java.io.Serial;

/**
 * 系统字典数据实体类
 * 
 * 功能特性：
 * - 支持数据字典数据管理
 * - 支持多租户数据隔离
 * - 支持软删除机制
 * - 支持乐观锁并发控制
 * - 支持数据审计追踪
 * - 支持字典数据状态管理
 * - 支持字典数据排序和样式控制
 * 
 * 业务说明：
 * - 字典数据是数据字典的具体内容
 * - 字典数据与字典类型是多对一关系
 * - 支持字典数据的排序显示
 * - 支持字典数据的样式控制（CSS类名、列表样式）
 * - 支持默认字典数据设置
 * - 支持字典数据的启用和停用状态控制
 * 
 * 关联关系：
 * - 与字典类型表：多对一关系，通过dict_type关联
 * - 与租户表：多对一关系，通过tenant_id关联
 * 
 * 数据约束：
 * - dict_label：字典标签，必填
 * - dict_value：字典键值，必填
 * - dict_type：字典类型，必填
 * - dict_sort：字典排序，数值越小越靠前
 * - is_default：是否默认，Y=是，N=否
 * - status：字典状态，0=正常，1=停用
 * 
 * @author convallaria
 * @since 1.0.0
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_dict_data")
public class SysDictData extends BaseEntity {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 字典编码
     * 主键，自增长
     */
    @TableId("dict_code")
    private Long dictCode;

    /**
     * 字典排序
     * 字典数据在列表中的显示顺序，数值越小越靠前
     */
    @TableField("dict_sort")
    private Integer dictSort;

    /**
     * 字典标签
     * 字典数据显示名称，必填字段
     */
    @TableField("dict_label")
    private String dictLabel;

    /**
     * 字典键值
     * 字典数据唯一标识，必填字段
     * 用于程序中的字典数据识别和访问
     */
    @TableField("dict_value")
    private String dictValue;

    /**
     * 字典类型
     * 关联的字典类型，必填字段
     * 用于区分不同的字典数据分类
     */
    @TableField("dict_type")
    private String dictType;

    /**
     * 样式属性
     * CSS类名，用于前端样式控制
     * 可以为空，支持自定义样式
     */
    @TableField("css_class")
    private String cssClass;

    /**
     * 表格回显样式
     * 列表显示样式，用于前端表格样式控制
     * 可以为空，支持自定义样式
     */
    @TableField("list_class")
    private String listClass;

    /**
     * 是否默认
     * Y=是默认项，N=非默认项
     * 每个字典类型只能有一个默认项
     */
    @TableField("is_default")
    private String isDefault;

    /**
     * 字典状态
     * 0=正常，1=停用
     * 停用的字典数据不能被使用
     */
    @TableField("status")
    private String status;

    /**
     * 租户ID
     * 多租户数据隔离标识
     */
    @TableField("tenant_id")
    private Long tenantId;
}
